/*
 * Nome do arquivo: colaboradorDAO.java
 * Autores:	Bruno Villas Bôas           - 317527
 *              Diego Zamboni               - 344990
 *              Endel Guimarães             - 379930
 * 		Guilherme Torres            - 400572
 *		Renan Oliveira              - 380113
 * 
 * Turma: 2012/1
 *
 * Descricao: DAO responsável pela armazenamento físico de colaborador
 *
 * Data de conclusao: 
*/

package cooper.classes.dao;

import com.sun.jmx.remote.internal.ArrayQueue;
import cooper.classes.bean.ColaboradorBean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class ColaboradorDAO 
{
    private Connection conn;
    private int total;

    public ColaboradorDAO() throws CooperDAOException
    {
        try
        {
            this.conn = ConnectionCooperFactory.getConnection();
        }
        catch(Exception e)
        {
            throw new CooperDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    // Cadastra uma colaborador no BD
    public int cadastrar(ColaboradorBean colaborador) throws CooperDAOException
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(colaborador == null)
        {
                throw new CooperDAOException("O valor passado não pode ser nulo");
        }

        try 
        {
            String nome = colaborador.getNome();
            String profissao = colaborador.getProfissao();
            String rua = colaborador.getRua();
            String numero = colaborador.getNumero();
            String bairro = colaborador.getBairro();
            String cidade = colaborador.getCidade();
            String estado = colaborador.getEstado();
            String email = colaborador.getEmail();
            String telefone = colaborador.getTelefone();
            
            // Insere a colaborador na base de dados
            String SQL = "INSERT INTO colaboradores (nome,profissao,rua,numero,bairro,cidade,estado,email,telefone) VALUES ('"+nome+"','"+profissao+"', '"+rua+"','"+numero+"','"+bairro+"','"+cidade+"','"+estado+"','"+email+"','"+telefone+"')";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.executeUpdate();
            ps = conn.prepareStatement("SELECT LAST_INSERT_ID() AS lastId");
           ResultSet rs = ps.executeQuery();
           rs.next();
           return Integer.parseInt(rs.getObject("lastId").toString());
        } 
        catch (SQLException sqle) 
        {
            throw new CooperDAOException("Erro ao inserir dados "+ sqle);
        } 
        finally 
        {
            ConnectionCooperFactory.closeConnection(conn, ps);
        }
    } // Fim do cadastrar
        
    // Altera uma colaborador no BD
    public void alterar(ColaboradorBean colaborador) throws CooperDAOException
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(colaborador == null)
        {
            throw new CooperDAOException("O valor passado não pode ser nulo");
        }

        try 
        {
            int id = colaborador.getId();
            String nome = colaborador.getNome();
            String profissao = colaborador.getProfissao();
            String rua = colaborador.getRua();
            String numero = colaborador.getNumero();
            String bairro = colaborador.getBairro();
            String cidade = colaborador.getCidade();
            String estado = colaborador.getEstado();
            String email = colaborador.getEmail();
            String telefone = colaborador.getTelefone();

            // Altera a colaborador na base de dados
            String SQL = "UPDATE colaboradores SET nome='"+nome+"', profissao='"+profissao+"', rua='"+rua+"', numero='"+numero+"', bairro='"+bairro+"', cidade='"+cidade+"', estado='"+estado+"', email='"+email+"', telefone = '"+telefone+"' WHERE idcolaboradores="+id;

            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.executeUpdate();
            
        } 
        catch (SQLException sqle) 
        {
            throw new CooperDAOException("Erro ao alterar dados "+ sqle);
        } 
        finally 
        {
            ConnectionCooperFactory.closeConnection(conn, ps);
        }
    } // Fim do alterar
        
    // Remove uma colaborador no BD
    public void remover(ColaboradorBean colaborador) throws CooperDAOException
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(colaborador == null)
        {
            throw new CooperDAOException("O valor passado não pode ser nulo");
        }

        try 
        {
            int id = colaborador.getId();
                 
            String SQL;
            
            // Remove a colaborador na base de dados
            SQL = "DELETE FROM colaboradores WHERE idcolaboradores="+id;

            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.executeUpdate();
        } 
        catch (SQLException sqle) 
        {
            throw new CooperDAOException("Erro ao remover dados "+ sqle);
        } 
        finally 
        {
            ConnectionCooperFactory.closeConnection(conn, ps);
        }
    } // Fim do remover

   // Consulta colaboradores por nome
    public ArrayList<ColaboradorBean> consultar(String nomePesquisa, int pagina) throws CooperDAOException
    {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            
           /* ps = this.conn.prepareStatement("Select count(1) as num from colaboradores where nome like '%" + nomePesquisa+"%'");
            rs = ps.executeQuery();
            rs.next();
            this.total=(Integer) rs.getObject("num");
*/
            // Talvez tenha que fazer a paginação, esse é o protótipo por enquanto           
            // Essa String tem que ser olhada com cuidado
            String SQL = "SELECT * FROM colaboradores WHERE nome LIKE '%" + nomePesquisa+"%' ORDER BY nome ASC LIMIT "+pagina*15+",15";
            
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            rs = ps.executeQuery();
            ArrayList novo=new ArrayList();
            
            while(rs.next())
            {
                int id = (Integer) rs.getObject("idcolaboradores");
                String nome = rs.getObject("nome").toString();
                String profissao = rs.getObject("profissao").toString();
                String rua = rs.getObject("rua").toString();
                String numero = rs.getObject("numero").toString();
                String bairro = rs.getObject("bairro").toString();
                String cidade = rs.getObject("cidade").toString();
                String estado = rs.getObject("estado").toString();
                String email = rs.getObject("email").toString();
                String telefone = rs.getObject("telefone").toString();
                
                // Não busca os telefones ainda
                // ArrayQueue<Integer> telefones = colaborador.getTelefones(); 

                novo.add(new ColaboradorBean(id, nome,profissao, rua, numero, bairro, cidade, estado, email, telefone));
            }
            return novo;
        } 
        catch (SQLException sqle) 
        {
                throw new CooperDAOException(sqle);
        } 
        finally 
        {
                // Tem que alterar isso aqui, claramente
                ConnectionCooperFactory.closeConnection(conn, ps, rs);
        }
    } // Fim do consultar
    
    
    

   // Consulta colaboradores por nome
    public ArrayList<ColaboradorBean> consultarLogin(int idParam) throws CooperDAOException
    {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            
           /* ps = this.conn.prepareStatement("Select count(1) as num from colaboradores where nome like '%" + nomePesquisa+"%'");
            rs = ps.executeQuery();
            rs.next();
            this.total=(Integer) rs.getObject("num");
*/
            // Talvez tenha que fazer a paginação, esse é o protótipo por enquanto           
            // Essa String tem que ser olhada com cuidado
            String SQL = "SELECT * FROM colaboradores WHERE idcolaboradores = "+ idParam;
            
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            rs = ps.executeQuery();
            ArrayList novo=new ArrayList();
            
            while(rs.next())
            {
                int id = (Integer) rs.getObject("idcolaboradores");
                String nome = rs.getObject("nome").toString();
                String profissao = rs.getObject("profissao").toString();
                String rua = rs.getObject("rua").toString();
                String numero = rs.getObject("numero").toString();
                String bairro = rs.getObject("bairro").toString();
                String cidade = rs.getObject("cidade").toString();
                String estado = rs.getObject("estado").toString();
                String email = rs.getObject("email").toString();
                String telefone = rs.getObject("telefone").toString();
                
                // Não busca os telefones ainda
                // ArrayQueue<Integer> telefones = colaborador.getTelefones(); 

                novo.add(new ColaboradorBean(id, nome,profissao, rua, numero, bairro, cidade, estado, email, telefone));
            }
            return novo;
        } 
        catch (SQLException sqle) 
        {
                throw new CooperDAOException(sqle);
        } 
        finally 
        {
                // Tem que alterar isso aqui, claramente
                ConnectionCooperFactory.closeConnection(conn, ps, rs);
        }
    } // Fim do consultar
    
    public int getTotal() throws CooperDAOException{
        return this.total;
    }
}
